package com.oneday.nuo.base.service.impl;


import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.lang.tree.TreeNodeConfig;
import cn.hutool.core.lang.tree.TreeUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.oneday.nuo.base.common.NuoUtil;
import com.oneday.nuo.base.config.BaseService;
import com.oneday.nuo.base.dao.NuoDeptDAO;
import com.oneday.nuo.base.dto.NuoDeptDTO;
import com.oneday.nuo.base.dto.TreeDTO;
import com.oneday.nuo.base.entity.NuoDeptEntity;
import com.oneday.nuo.base.service.NuoDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;


/**
 * 部门表(NuoDept)表服务实现类
 *
 * @author liushuai
 * @since 2021-03-13 23:37:01
 */
@Service("nuoDeptService")
public class NuoDeptServiceImpl extends BaseService<NuoDeptDAO, NuoDeptEntity> implements NuoDeptService {

    @Autowired
    private NuoDeptDAO nuoDeptDao;


    @Override
    public void saveDept(NuoDeptDTO nuoDeptDTO) {
        NuoUtil.isNotNull("公司id不能为空",nuoDeptDTO.getCompanyId());
        NuoUtil.isNotNull("部门名称不能为空",nuoDeptDTO.getDeptName());
        if(StrUtil.isBlank(nuoDeptDTO.getPid())){
            nuoDeptDTO.setPid("0");
        }
        NuoDeptEntity entity = Convert.convert(NuoDeptEntity.class, nuoDeptDTO);
        this.saveOrUpdate(entity);
    }

    @Override
    public NuoDeptEntity queryDeptById(String id) {
        return nuoDeptDao.selectById(id);
    }

    @Override
    public void deleteDeptById(String id) {
         nuoDeptDao.deleteById(id);

    }

    @Override
    public List<Tree<String>> queryAllDept(Map<String, Object> map) {
        LambdaQueryWrapper<NuoDeptEntity> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ObjectUtil.isNotEmpty(map.get("isCompany")),NuoDeptEntity::getIsCompany,map.get("isCompany"));
        List<NuoDeptEntity> entities = nuoDeptDao.selectList(wrapper);
        TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
        List<Tree<String>> treeNodes = TreeUtil.build(entities, "0", treeNodeConfig,
                (treeNode, tree) -> {
                    TreeDTO treeDTO = new TreeDTO();
                    tree.setId(treeNode.getId());
                    tree.setParentId(treeNode.getPid());
                    tree.setWeight(treeNode.getCreateDate());
                    tree.setName(treeNode.getDeptName());
                    tree.putExtra("scopedSlots",treeDTO);

                });
        return treeNodes;
    }
}
